//package com.example.admin.config;
//
//
//import com.alibaba.druid.DbType;
//import com.alibaba.druid.filter.Filter;
//import com.alibaba.druid.filter.logging.Slf4jLogFilter;
//import com.alibaba.druid.filter.stat.StatFilter;
//import com.alibaba.druid.pool.DruidDataSource;
//import com.alibaba.druid.support.jakarta.StatViewServlet;
//import com.alibaba.druid.support.jakarta.WebStatFilter;
//import com.alibaba.druid.wall.WallConfig;
//import com.alibaba.druid.wall.WallFilter;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.context.properties.ConfigurationProperties;
//import org.springframework.boot.web.servlet.FilterRegistrationBean;
//import org.springframework.boot.web.servlet.ServletRegistrationBean;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
//import javax.sql.DataSource;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//
///**
// * 这种方式是没有使用druid-starter的方式，使用starter都是自动配置
// *
// */
//@Configuration
//public class DruidDataSourceConfiguration {
//
//    /**
//     * 当配置了spring.datasource.type属性时，springboot会默认根据type的类型配置一个{@link org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration.Generic}连接池
//     * @param filters
//     * @return
//     */
//
//    @Bean
//    @ConfigurationProperties(prefix = "spring.datasource")
//    public DataSource dataSource(@Autowired(required = false)List<Filter> filters) {
//        DruidDataSource druidDataSource = new DruidDataSource();
//        druidDataSource.setProxyFilters(filters);
//        return druidDataSource;
//    }
//
//    /**
//     * 开启druid监控面板
//     * @return
//     */
//    @Bean
//    public ServletRegistrationBean<StatViewServlet> statServlet() {
//        ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
//        Map<String,String> initParam = new HashMap<>();
//        initParam.put("loginUsername", "druid");
//        initParam.put("loginPassword", "druid");
// //       initParam.put("allow", "127.0.0.1");
// //       initParam.put("deny", "222.222.222.222");
//        bean.setInitParameters(initParam);
//        return bean;
//    }
//
//
//    /**
//     * 定制sql监控
//     * https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter
//     * @return
//     */
//    @Bean
//    public StatFilter statFilter() {
//        StatFilter statFilter = new StatFilter();
//        // 对未参数化的sql进行合并
//        statFilter.setMergeSql(true);
//        // 统计慢sql 单位毫秒
//        statFilter.setSlowSqlMillis(3000);
//        return statFilter;
//    }
//
//    /**
//     *
//     * @return
//     */
//    @Bean
//    public WallConfig wallConfig() {
//        WallConfig wallConfig = new WallConfig();
//        // 不允许执行delete语句
//        wallConfig.setDeleteAllow(false);
//        return wallConfig;
//    }
//
//    @Bean
//    public WallFilter wallFilter(WallConfig wallConfig) {
//        WallFilter wallFilter = new WallFilter();
//        wallFilter.setDbType(DbType.oracle);
//        wallFilter.setConfig(wallConfig);
//        return wallFilter;
//    }
//
//
//    /**
//     * https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_LogFilter
//     * @return
//     */
//    @Bean
//    public Slf4jLogFilter slf4jLogFilter() {
//        Slf4jLogFilter slf4jLogFilter = new Slf4jLogFilter();
//        // 打印最终执行的sql，替换好参数的sql
//        slf4jLogFilter.setStatementExecutableSqlLogEnable(true);
//        return slf4jLogFilter;
//    }
//
//
//    /**
//     * 开启Web应用监控
//     * https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_%E9%85%8D%E7%BD%AEWebStatFilter
//     * @return
//     */
//    @Bean
//    public FilterRegistrationBean<WebStatFilter> webStatFilter() {
//        FilterRegistrationBean<WebStatFilter> filterRegistrationBean = new FilterRegistrationBean<>();
//        WebStatFilter webStatFilter = new WebStatFilter();
//        // 禁用Session模块的统计
//        webStatFilter.setSessionStatEnable(false);
//        filterRegistrationBean.setFilter(webStatFilter);
//        Map<String, String> initParam = new HashMap<>();
//        initParam.put("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
//        filterRegistrationBean.setInitParameters(initParam);
//        filterRegistrationBean.setUrlPatterns(List.of("/*"));
//        return  filterRegistrationBean;
//    }
//}
